INFORMATIE VISUALISATIE GROEP I3#

Yurish Koebeer, Abuzar Hosseini, Mohamed el Harchaoui en Mouad Kasmi

Introductie#

Immigratie en de invloed ervan op de lonen van Amerikaanse werknemers is een veelbesproken onderwerp. Sommige mensen denken dat een toestroom van immigranten het arbeidsaanbod vergroot, wat de lonen kan verlagen, vooral in laaggeschoolde sectoren. Dit komt doordat de concurrentie voor banen toeneemt, wat de onderhandelingspositie van inheemse werknemers verzwakt.

Aan de andere kant zijn er mensen die geloven dat immigranten de economische groei stimuleren, essentiële rollen vervullen en innovatie bevorderen. Dit zou uiteindelijk kunnen leiden tot hogere lonen en meer welvaart voor iedereen.

Een recent voorbeeld is het beleid van voormalig president Donald Trump. Tijdens zijn presidentschap werden maatregelen genomen om de immigratie te beperken, zoals strengere regels voor asielaanvragen en het blokkeren van migranten uit bepaalde landen. In dezelfde periode zagen we een daling van de werkloosheid en een stijging van de lonen. De vraag is echter of deze verbeteringen direct toe te schrijven zijn aan de afname van de immigratie, of dat er andere factoren meespelen.

In deze studie onderzoeken we deze verschillende perspectieven en proberen we de complexe dynamiek van immigratie en de effecten ervan op de Amerikaanse arbeidsmarkt te begrijpen.

Dataset en Voorverwerking#

In eerste instantie hebben we besloten dat elk teamlid ten minste één dataset van interesse moest vinden met voldoende gegevens waaruit ten minste twee perspectieven kunnen worden afgeleid. Tijdens de eerste teamvergadering werd elke dataset besproken samen met mogelijke correlaties. Uiteindelijk hebben we de datasets gekozen van US Immigration Statistics (1980-2021) en Minimum Wage by State, omdat deze datasets correlaties hebben die nuttig kunnen zijn voor onze studie. Na wat brainstormen tijdens teamvergaderingen, hebben we besloten om de impact van immigratie op de lonen van Amerikaanse werknemers te onderzoeken.

Opschonen#

Elke dataset bevatte enkele wijzigingen vergeleken met andere jaren, zoals kolomhernoemingen of structurele wijzigingen. We moesten twee fasen doorlopen om alles correct op te schonen. De eerste fase is waarin kolommen worden hernoemd en herstructureerd om ze samen te voegen. Kolommen zijn handmatig samengevoegd door ze één voor één te inspecteren en de kolommen samen te voegen die ongeveer dezelfde naam of inhoud hebben qua wat ze vertegenwoordigen. Kolommen die niet nuttig waren, werden onmiddellijk uitgesloten tijdens dit proces.

De tweede fase omvat het normaliseren van de data. In het algemeen is dit gedaan door de unieke waarden voor elke kolom grondig te inspecteren en waarden die dezelfde betekenis vertegenwoordigen te combineren.

Ten slotte hebben we besloten om parquet (.parquet) te gebruiken als het bestandstype voor onze uiteindelijke dataset. Dit stelt ons in staat om het datatype voor elke kolom te specificeren en de algehele bestandsgrootte van de uiteindelijke dataset te verkleinen met extra gzip-compressie. Dit resulteerde in een 7.2MB parquet-bestand, in plaats van een 145MB CSV-bestand.

Uiteindelijk zijn in totaal 955 kolommen uit de twee datasets teruggebracht tot één dataset met 19 kolommen en 535,759 rijen.

Variabele Beschrijvingen#

Qua variabele type en meetschaal kunnen de variabelen in de uiteindelijke dataset worden ingedeeld in verschillende combinaties:

  • Continue / Ratio variabelen: Year, Immigrants Obtaining Lawful Permanent Resident Status, Average Wage, CPI.Average, High.2018, Low.2018

  • Discrete / Ordinale variabelen: Immigrant Population Level

  • Discrete / Nominale variabelen: Sector

Variabelen die momenteel worden gebruikt zijn: Year, Immigrants Obtaining Lawful Permanent Resident Status, Average Wage, CPI.Average, High.2018, Low.2018, Immigrant Population Level, Sector

Aggregaties#

In het algemeen worden de meeste aggregaties uitgevoerd om de impact van immigratie op lonen in verhouding tot de Amerikaanse beroepsbevolking te berekenen. Dit wordt gedaan door het gemiddelde loon voor zowel sectoren met een hoge als lage immigrantenpopulatie te nemen, deze te vergelijken en trends in de tijd af te leiden. In wiskundige notatie is dit gedefinieerd als:

\[ \text{Wage Difference} = \frac{\text{Mean Wage in High Immigrant Population Sectors} - \text{Mean Wage in Low Immigrant Population Sectors}}{\text{Mean Wage in Low Immigrant Population Sectors}} \]

In de meeste grafieken wordt een percentage gebruikt, wat de bovenstaande formule vermenigvuldigd met 100 is.

Voorbeeld: Stel dat in de Verenigde Staten het gemiddelde jaarlijkse loon voor sectoren met hoge immigrantenpopulaties \\(50.000 is en voor sectoren met lage immigrantenpopulaties \\\)55.000. Dan is het loonverschil -9,1% met behulp van de bovengenoemde berekening. Als sectoren met hoge immigrantenpopulaties \\(60.000 per jaar zouden verdienen en sectoren met lage immigrantenpopulaties \\\)55.000 per jaar zouden verdienen, dan is het loonverschil +9,1%. We noemen de procentuele uitkomst een positieve verschil als het percentage positief is. Wanneer de uitkomst negatief is, wordt het beschouwd als een negatieve verschil.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Load the datasets
dataset1 = pd.read_csv('immigration_statistics_us.csv', encoding='ISO-8859-1')
dataset2 = pd.read_csv('minimum_wage_us.csv', encoding='ISO-8859-1')
# dataset3 = pd.read_csv('unemployment_rate_data.csv', encoding='ISO-8859-1')
dataset3 = pd.read_csv('unemployment_rate_data_corrected.csv', encoding='ISO-8859-1')
# Display the first 5 rows of each dataset
print("First Dataset Head:")
dataset1.head()
First Dataset Head:
Year Immigrants Obtaining Lawful Permanent Resident Status Refugee Arrivals Noncitizen Apprehensions Noncitizen Removals Noncitizen Returns
0 1980 524,295 207,116 910,361 18,013 719,211
1 1981 595,014 159,252 975,780 17,379 823,875
2 1982 533,624 98,096 970,246 15,216 812,572
3 1983 550,052 61,218 1,251,357 19,211 931,600
4 1984 541,811 70,393 1,246,981 18,696 909,833
print("First Dataset Tail:")
dataset1.tail()
First Dataset Tail:
Year Immigrants Obtaining Lawful Permanent Resident Status Refugee Arrivals Noncitizen Apprehensions Noncitizen Removals Noncitizen Returns
37 2017 1,127,167 53,691 607,677 284,298 100,454
38 2018 1,096,611 22,405 739,486 327,554 159,960
39 2019 1,031,765 29,916 1,175,841 347,183 171,125
40 2020 707,362 11,840 609,265 237,861 167,453
41 2021 740,002 11,454 1,865,379 89,191 178,227
print("\nSecond Dataset Head:")
dataset2.head()
Second Dataset Head:
Year State State.Minimum.Wage State.Minimum.Wage.2020.Dollars Federal.Minimum.Wage Federal.Minimum.Wage.2020.Dollars Effective.Minimum.Wage Effective.Minimum.Wage.2020.Dollars CPI.Average Department.Of.Labor.Uncleaned.Data Department.Of.Labor.Cleaned.Low.Value Department.Of.Labor.Cleaned.Low.Value.2020.Dollars Department.Of.Labor.Cleaned.High.Value Department.Of.Labor.Cleaned.High.Value.2020.Dollars Footnote
0 1968 Alabama 0.00000 0.00 1.15 8.55 1.15 8.55 34.8 ... 0.00000 0.00 0.00000 0.00 NaN
1 1968 Alaska 2.10000 15.61 1.15 8.55 2.10 15.61 34.8 2.1 2.10000 15.61 2.10000 15.61 NaN
2 1968 Arizona 0.46800 3.48 1.15 8.55 1.15 8.55 34.8 18.72 - 26.40/wk(b) 0.46800 3.48 0.66000 4.91 (b)
3 1968 Arkansas 0.15625 1.16 1.15 8.55 1.15 8.55 34.8 1.25/day(b) 0.15625 1.16 0.15625 1.16 (b)
4 1968 California 1.65000 12.26 1.15 8.55 1.65 12.26 34.8 1.65(b) 1.65000 12.26 1.65000 12.26 (b)
print("First Dataset Tail:")
dataset2.tail()
First Dataset Tail:
Year State State.Minimum.Wage State.Minimum.Wage.2020.Dollars Federal.Minimum.Wage Federal.Minimum.Wage.2020.Dollars Effective.Minimum.Wage Effective.Minimum.Wage.2020.Dollars CPI.Average Department.Of.Labor.Uncleaned.Data Department.Of.Labor.Cleaned.Low.Value Department.Of.Labor.Cleaned.Low.Value.2020.Dollars Department.Of.Labor.Cleaned.High.Value Department.Of.Labor.Cleaned.High.Value.2020.Dollars Footnote
2857 2020 Virginia 7.25 7.25 7.25 7.25 7.25 7.25 258.66 7.25[c] 7.25 7.25 7.25 7.25 [c]
2858 2020 Washington 13.50 13.50 7.25 7.25 13.50 13.50 258.66 13.5 13.50 13.50 13.50 13.50 NaN
2859 2020 West Virginia 8.75 8.75 7.25 7.25 8.75 8.75 258.66 8.75 8.75 8.75 8.75 8.75 NaN
2860 2020 Wisconsin 7.25 7.25 7.25 7.25 7.25 7.25 258.66 7.25 7.25 7.25 7.25 7.25 NaN
2861 2020 Wyoming 5.15 5.15 7.25 7.25 7.25 7.25 258.66 5.15 5.15 5.15 5.15 5.15 NaN
print("Third Dataset Head:")
dataset3.head()
Third Dataset Head:
date unrate unrate_men unrate_women unrate_16_to_17 unrate_18_to_19 unrate_20_to_24 unrate_25_to_34 unrate_35_to_44 unrate_45_to_54 unrate_55_over
0 1980 7.1 7.0 7.4 19.9 16.2 11.5 6.9 4.6 4.0 3.3
1 1981 7.6 7.4 7.9 21.5 18.4 12.3 7.3 5.0 4.2 3.6
2 1982 9.7 9.9 9.4 25.0 22.1 14.9 9.7 6.9 5.7 5.0
3 1983 9.6 9.9 9.2 24.6 21.1 14.5 9.7 7.0 6.2 5.3
4 1984 7.5 7.4 7.6 21.3 17.5 11.5 7.3 5.4 4.9 4.4
print("Third Dataset Tail:")
dataset3.tail()
Third Dataset Tail:
date unrate unrate_men unrate_women unrate_16_to_17 unrate_18_to_19 unrate_20_to_24 unrate_25_to_34 unrate_35_to_44 unrate_45_to_54 unrate_55_over
37 2017 4.4 4.4 4.3 15.5 13.1 7.4 4.6 3.5 3.1 3.2
38 2018 3.9 4.0 3.8 13.8 12.3 6.9 4.0 3.0 2.8 3.0
39 2019 3.7 3.7 3.6 13.9 11.9 6.7 3.7 2.7 2.7 2.7
40 2020 8.1 7.8 8.4 17.7 18.3 13.9 8.5 6.4 6.4 7.0
41 2021 5.5 5.6 5.4 11.6 12.1 9.2 5.9 4.8 4.3 4.4
dataset1['Immigrants Obtaining Lawful Permanent Resident Status'] = dataset1['Immigrants Obtaining Lawful Permanent Resident Status'].str.replace(',', '').astype(int)
plt.figure(figsize=(10, 6))
sns.lineplot(x='Year', y='Immigrants Obtaining Lawful Permanent Resident Status', data=dataset1)
plt.title('Trend of Immigrants Obtaining Lawful Permanent Resident Status')
plt.xlabel('Year')
plt.ylabel('Number of Immigrants')
plt.show()
_images/74a44574da1a674e68cbc028d61fa112d896fb07366a8a6e9b02e9d114af3d48.png

Uit deze grafiek blijkt dat er grote fluctuaties zijn in het aantal “Immigrants Obtaining Lawful Permanent Resident Status”. Vooral rond 1990 is er een duidelijke piek te zien. Dit kan wijzen op beleidswijzigingen of andere socio-economische factoren die de immigratie in die periode hebben beïnvloed.

dataset1.columns = dataset1.columns.str.strip()

columns_to_convert = [
    'Immigrants Obtaining Lawful Permanent Resident Status', 
    'Refugee Arrivals', 
    'Noncitizen Apprehensions', 
    'Noncitizen Removals', 
    'Noncitizen Returns'
]

for column in columns_to_convert:
    dataset1[column] = dataset1[column].apply(lambda x: int(str(x).replace(',', '')) if pd.notnull(x) else x)

merged_data = pd.merge(dataset1, dataset2, left_on='Year', right_on='Year')

grouped_data = merged_data[['Year', 'Immigrants Obtaining Lawful Permanent Resident Status', 'Refugee Arrivals']]
grouped_data = grouped_data.melt(id_vars=['Year'], value_vars=['Immigrants Obtaining Lawful Permanent Resident Status', 'Refugee Arrivals'], 
                                 var_name='Category', value_name='Number of People')

plt.figure(figsize=(14, 8))
sns.barplot(x='Year', y='Number of People', hue='Category', data=grouped_data)
plt.title('Total Immigrants and Refugee Arrivals Each Year')
plt.xlabel('Year')
plt.ylabel('Number of People')
plt.xticks(rotation=90)
plt.legend(title='Category')
plt.show()
_images/8feb7f317b92f264d89928e1fbcdd1a203ad9265b92269f7a22b3dde7e5dc8a2.png

Deze grafiek toont een vergelijking tussen “Immigrants Obtaining Lawful Permanent Resident Status” en “Refugee Arrivals”. De gegevens laten zien dat het aantal “Refugee Arrivals” relatief klein is in vergelijking met het totale aantal “Immigrants Obtaining Lawful Permanent Resident Status”. Dit geeft een beter zicht op de relatieve schaal van deze twee categorieën binnen de totale immigratie.

plt.figure(figsize=(10, 6))
sns.lineplot(x='Year', y='CPI.Average', data=dataset2)
plt.title('Minimum Wage Trends Over Time')
plt.xlabel('Year')
plt.ylabel('CPI Average')
plt.show()
_images/d52ed6c6f778768c6d65e03e114874b01423dd3ff567ba99a9c5d6e22d98cd5a.png

De grafiek toont een gelijkmatige stijging van het gemiddelde CPI (Consumentenprijsindex) over de jaren, wat aangeeft dat het minimumloon over tijd is verhoogd. Dit kan wijzen op inflatiecorrecties en beleidsmaatregelen die gericht zijn op het verbeteren van het loonpeil. Gestapelde Staafdiagram van Genormaliseerde Immigranten die de Status van Wettig Permanent Ingezetene Verkrijgen en Minimumloon

for column in columns_to_convert:
    dataset1[column] = dataset1[column].apply(lambda x: int(str(x).replace(',', '')) if pd.notnull(x) else x)

merged_data = pd.merge(dataset1, dataset2, left_on='Year', right_on='Year')

merged_data['Normalized Immigrants'] = merged_data['Immigrants Obtaining Lawful Permanent Resident Status'] / merged_data['Immigrants Obtaining Lawful Permanent Resident Status'].max()
merged_data['Normalized Minimum Wage'] = merged_data['State.Minimum.Wage.2020.Dollars'] / merged_data['State.Minimum.Wage.2020.Dollars'].max()

bar_data = merged_data[['Year', 'Normalized Immigrants', 'Normalized Minimum Wage']]
bar_data = bar_data.melt(id_vars=['Year'], value_vars=['Normalized Immigrants', 'Normalized Minimum Wage'], 
                         var_name='Category', value_name='Normalized Value')

plt.figure(figsize=(14, 8))
sns.barplot(x='Year', y='Normalized Value', hue='Category', data=bar_data)
plt.title('Normalized Immigrants Obtaining Lawful Permanent Resident Status and Minimum Wage Over Time')
plt.xlabel('Year')
plt.ylabel('Normalized Value')
plt.xticks(rotation=90)
plt.legend(title='Category')
plt.show()
_images/95fdb7834e6e58fdc365576cf31728104212c8307130479e75ac9e05cfa0edee.png

De genormaliseerde waarden maken het mogelijk om de trends van beide variabelen (immigranten en minimumloon) over tijd te vergelijken. Het laat zien dat hoewel de waarden verschillen in schaal, er een algemene trend van stijging is voor beide variabelen, wat suggereert dat beide factoren mogelijk in verband zijn met de economische omstandigheden.

for column in columns_to_convert:
    dataset1[column] = dataset1[column].apply(lambda x: int(str(x).replace(',', '')) if pd.notnull(x) else x)

merged_data = pd.merge(dataset1, dataset2, left_on='Year', right_on='Year')

plt.figure(figsize=(10, 6))
sns.lineplot(x='Year', y='Noncitizen Apprehensions', data=dataset1)
plt.title('Trend of Noncitizen Apprehensions Over Time')
plt.xlabel('Year')
plt.ylabel('Noncitizen Apprehensions')
plt.show()
_images/9489d4452f3a425c6e17665726f95f372322f632caea9b3a1ec6ffebcfdd3d8c.png

Deze grafiek toont de trends in het aantal aanhoudingen van niet-burgers. De data laten zien dat er pieken en dalen zijn geweest, met name rond 1990 en een opmerkelijke piek na 2020. Dit kan wijzen op veranderende immigratiehandhavingsstrategieën of externe factoren zoals politieke veranderingen en crises.

import pandas as pd
import plotly.express as px
import ipywidgets as widgets
from IPython.display import display

# Load the dataset with proper encoding
minimum_wage_data = pd.read_csv('minimum_wage_us.csv', encoding='ISO-8859-1')

# Filtering relevant columns
merged_data = minimum_wage_data[['Year', 'State.Minimum.Wage.2020.Dollars']].copy()

def update_violin_plot(year):
    filtered_data = merged_data[merged_data['Year'] == year]
    
    fig = px.violin(filtered_data, y='State.Minimum.Wage.2020.Dollars', orientation='v',
                    title=f'Violin Plot of Minimum Wage (2020 Dollars) for the Year {year}')
    
    fig.update_layout(yaxis_title='Minimum Wage (2020 Dollars)', xaxis_title='Year')
    fig.show(renderer='notebook')  # Ensuring the plot is shown in Jupyter Notebook

# Create the IntSlider widget
year_slider = widgets.IntSlider(value=2000, min=1980, max=2020, step=1, description='Year')

# Create the Play widget
play = widgets.Play(
    value=1980,
    min=1980,
    max=2020,
    step=1,
    interval=300,  # interval in milliseconds
    description="Press play",
    disabled=False
)

# Link the slider and the play widget
widgets.jslink((play, 'value'), (year_slider, 'value'))

# Use interactive to automatically update the plot
interactive_plot = widgets.interactive(update_violin_plot, year=year_slider)

# Display the play widget, the slider, and the plot
display(play, interactive_plot)

De boxplot toont de spreiding van het minimumloon over de jaren. We zien een daling in de vroege jaren en een geleidelijke stijging vanaf het begin van de 21e eeuw. De aanwezigheid van uitschieters kan wijzen op jaren waarin er significante afwijkingen waren van de algemene loontrend, mogelijk als gevolg van uitzonderlijke economische omstandigheden of beleidswijzigingen.

import pandas as pd
import plotly.graph_objects as go

# Load the dataset with proper encoding
minimum_wage_data = pd.read_csv('minimum_wage_us.csv', encoding='ISO-8859-1')

# Filtering relevant columns
merged_data = minimum_wage_data[['Year', 'State.Minimum.Wage.2020.Dollars']].copy()

# Create figure
fig = go.Figure()

# Add initial trace for the first year
initial_year = merged_data['Year'].min()
initial_data = merged_data[merged_data['Year'] == initial_year]
fig.add_trace(go.Violin(
    y=initial_data['State.Minimum.Wage.2020.Dollars'],
    name=str(initial_year),
    box_visible=True,
    meanline_visible=True
))

# Create animation frames
frames = []
years = merged_data['Year'].unique()
for year in years:
    yearly_data = merged_data[merged_data['Year'] == year]
    frames.append(go.Frame(
        data=[go.Violin(
            y=yearly_data['State.Minimum.Wage.2020.Dollars'],
            box_visible=True,
            meanline_visible=True
        )],
        name=str(year)
    ))

fig.frames = frames

# Add slider and animation settings
fig.update_layout(
    updatemenus=[dict(
        type="buttons",
        buttons=[dict(label="Play",
                      method="animate",
                      args=[None, dict(frame=dict(duration=200, redraw=True),  # faster animation speed
                                       transition=dict(duration=0))])])]
)

sliders = [dict(steps=[dict(method='animate',
                            args=[[str(year)], dict(mode='immediate',
                                                    frame=dict(duration=200, redraw=True),  # faster animation speed
                                                    transition=dict(duration=0))],
                            label=str(year)) for year in years],
                transition=dict(duration=0),
                x=0,  # slider starting position
                xanchor='left',
                y=0,
                yanchor='top'
               )]

# Update layout with increased height
fig.update_layout(sliders=sliders, height=800)  # Increase height to 800 pixels

fig.update_layout(yaxis_title='Minimum Wage (2020 Dollars)', xaxis_title='Year')

fig.show()
import pandas as pd
import plotly.graph_objects as go

# Load the datasets
immigration_data = pd.read_csv('immigration_statistics_us.csv')
unemployment_data = pd.read_csv('unemployment_rate_data.csv')

# Hernoem de kolommen voor consistentie
immigration_data = immigration_data.rename(columns={
    'Year': 'Year',  # Fix the column name here
    'Immigrants Obtaining Lawful Permanent Resident Status': 'Legal_Immigrants',
    'Noncitizen Apprehensions': 'Illegal_Immigrants'
})

unemployment_data = unemployment_data.rename(columns={
    'date': 'Year',
    'unrate': 'Unemployment_Rate'
})

# Extract year from the 'Year' column in unemployment_data
unemployment_data['Year'] = pd.to_datetime(unemployment_data['Year']).dt.year

# Verwijder komma's en converteer kolommen naar numeriek type in immigration_data
immigration_data['Legal_Immigrants'] = immigration_data['Legal_Immigrants'].str.replace(',', '').astype(int)
immigration_data['Illegal_Immigrants'] = immigration_data['Illegal_Immigrants'].str.replace(',', '').astype(int)

# Mergen van datasets op basis van het jaar
merged_data = pd.merge(immigration_data, unemployment_data, on='Year')

# Creëer de figuur
fig = go.Figure()

# Voeg de lijn voor legale immigranten toe
fig.add_trace(go.Scatter(
    x=merged_data['Year'],
    y=merged_data['Legal_Immigrants'],
    mode='lines+markers',
    name='Legal Immigrants',
    yaxis='y1'
))

# Voeg de lijn voor illegale immigranten toe
fig.add_trace(go.Scatter(
    x=merged_data['Year'],
    y=merged_data['Illegal_Immigrants'],
    mode='lines+markers',
    name='Illegal Immigrants',
    yaxis='y2'
))

# Voeg het staafdiagram voor werkloosheid toe
fig.add_trace(go.Bar(
    x=merged_data['Year'],
    y=merged_data['Unemployment_Rate'],
    name='Unemployment Rate',
    yaxis='y3',
    opacity=0.6,
    hovertemplate='%{x}, %{y:.1f}%'  # Voeg een procentteken toe aan de hoverinformatie
))

# Update layout om de verschillende assen te ondersteunen
fig.update_layout(
    title='Immigration and Unemployment Statistics Over Time',
    xaxis=dict(title='Year'),
    yaxis=dict(
        title='Legal Immigrants',
        titlefont=dict(color='blue'),
        tickfont=dict(color='blue')
    ),
    yaxis2=dict(
        title='Illegal Immigrants',
        titlefont=dict(color='red'),
        tickfont=dict(color='red'),
        overlaying='y',
        side='right'
    ),
    yaxis3=dict(
        title='Unemployment Rate (%)',
        titlefont=dict(color='green'),
        tickfont=dict(color='green'),
        tickformat='.1f',  # Voeg een procentteken toe aan de labels
        anchor='free',
        overlaying='y',
        side='right',
        position=1
    ),
    legend=dict(x=0, y=1.1),
    height=600  # Adjust height here
)

# Toon de figuur
fig.show()
import pandas as pd
import plotly.express as px

# Load the dataset
minimum_wage_data = pd.read_csv('minimum_wage_us.csv', encoding='ISO-8859-1')

# Mapping van volledige staatnamen naar afkortingen
state_abbreviations = {
    'Alabama': 'AL', 'Alaska': 'AK', 'Arizona': 'AZ', 'Arkansas': 'AR', 'California': 'CA',
    'Colorado': 'CO', 'Connecticut': 'CT', 'Delaware': 'DE', 'District of Columbia': 'DC',
    'Florida': 'FL', 'Georgia': 'GA', 'Hawaii': 'HI', 'Idaho': 'ID', 'Illinois': 'IL',
    'Indiana': 'IN', 'Iowa': 'IA', 'Kansas': 'KS', 'Kentucky': 'KY', 'Louisiana': 'LA',
    'Maine': 'ME', 'Maryland': 'MD', 'Massachusetts': 'MA', 'Michigan': 'MI', 'Minnesota': 'MN',
    'Mississippi': 'MS', 'Missouri': 'MO', 'Montana': 'MT', 'Nebraska': 'NE', 'Nevada': 'NV',
    'New Hampshire': 'NH', 'New Jersey': 'NJ', 'New Mexico': 'NM', 'New York': 'NY', 'North Carolina': 'NC',
    'North Dakota': 'ND', 'Ohio': 'OH', 'Oklahoma': 'OK', 'Oregon': 'OR', 'Pennsylvania': 'PA',
    'Rhode Island': 'RI', 'South Carolina': 'SC', 'South Dakota': 'SD', 'Tennessee': 'TN', 'Texas': 'TX',
    'Utah': 'UT', 'Vermont': 'VT', 'Virginia': 'VA', 'Washington': 'WA', 'West Virginia': 'WV',
    'Wisconsin': 'WI', 'Wyoming': 'WY', 'Guam': 'GU', 'Puerto Rico': 'PR', 'U.S. Virgin Islands': 'VI'
}

# Corrigeer de staatnamen in de dataset
minimum_wage_data['State'] = minimum_wage_data['State'].map(state_abbreviations)

# Controleer of de mapping correct is toegepast
print("Staten na correctie:", minimum_wage_data['State'].unique())

# Maak de heatmap met een slider voor elk jaar
fig = px.choropleth(minimum_wage_data,
                    locations='State',
                    locationmode='USA-states',
                    color='State.Minimum.Wage.2020.Dollars',
                    color_continuous_scale='Viridis',
                    scope='usa',
                    animation_frame='Year',
                    title='Minimum Wage by State Over Time (2020 Dollars)',
                    labels={'State.Minimum.Wage.2020.Dollars': 'Minimum Wage (2020 Dollars)'})

# Toon de heatmap
fig.show()
Staten na correctie: ['AL' 'AK' 'AZ' 'AR' 'CA' 'CO' 'CT' 'DE' 'DC' 'FL' 'GA' 'GU' 'HI' 'ID'
 'IL' 'IN' 'IA' 'KS' 'KY' 'LA' 'ME' 'MD' 'MA' 'MI' 'MN' 'MS' 'MO' 'MT'
 'NE' 'NV' 'NH' 'NJ' 'NM' 'NY' 'NC' 'ND' 'OH' 'OK' 'OR' 'PA' 'PR' 'RI'
 'SC' 'SD' 'TN' 'TX' 'VI' 'UT' 'VT' 'VA' 'WA' 'WV' 'WI' 'WY']
import pandas as pd
import plotly.express as px

# Load the dataset
minimum_wage_data = pd.read_csv('minimum_wage_us.csv', encoding='ISO-8859-1')

# Mapping van volledige staatnamen naar afkortingen
state_abbreviations = {
    'Alabama': 'AL', 'Alaska': 'AK', 'Arizona': 'AZ', 'Arkansas': 'AR', 'California': 'CA',
    'Colorado': 'CO', 'Connecticut': 'CT', 'Delaware': 'DE', 'District of Columbia': 'DC',
    'Florida': 'FL', 'Georgia': 'GA', 'Hawaii': 'HI', 'Idaho': 'ID', 'Illinois': 'IL',
    'Indiana': 'IN', 'Iowa': 'IA', 'Kansas': 'KS', 'Kentucky': 'KY', 'Louisiana': 'LA',
    'Maine': 'ME', 'Maryland': 'MD', 'Massachusetts': 'MA', 'Michigan': 'MI', 'Minnesota': 'MN',
    'Mississippi': 'MS', 'Missouri': 'MO', 'Montana': 'MT', 'Nebraska': 'NE', 'Nevada': 'NV',
    'New Hampshire': 'NH', 'New Jersey': 'NJ', 'New Mexico': 'NM', 'New York': 'NY', 'North Carolina': 'NC',
    'North Dakota': 'ND', 'Ohio': 'OH', 'Oklahoma': 'OK', 'Oregon': 'OR', 'Pennsylvania': 'PA',
    'Rhode Island': 'RI', 'South Carolina': 'SC', 'South Dakota': 'SD', 'Tennessee': 'TN', 'Texas': 'TX',
    'Utah': 'UT', 'Vermont': 'VT', 'Virginia': 'VA', 'Washington': 'WA', 'West Virginia': 'WV',
    'Wisconsin': 'WI', 'Wyoming': 'WY', 'Guam': 'GU', 'Puerto Rico': 'PR', 'U.S. Virgin Islands': 'VI'
}

# Corrigeer de staatnamen in de dataset
minimum_wage_data['State'] = minimum_wage_data['State'].map(state_abbreviations)

# Controleer of de mapping correct is toegepast
print("Staten na correctie:", minimum_wage_data['State'].unique())

# Maak de heatmap met een slider voor elk jaar
fig = px.choropleth(minimum_wage_data,
                    locations='State',
                    locationmode='USA-states',
                    color='State.Minimum.Wage.2020.Dollars',
                    color_continuous_scale='Viridis',
                    scope='usa',
                    animation_frame='Year',
                    title='Minimum Wage by State Over Time (2020 Dollars)',
                    labels={'State.Minimum.Wage.2020.Dollars': 'Minimum Wage (2020 Dollars)'})

# Pas de snelheid van de slider aan
fig.update_layout(
    sliders=[{
        'currentvalue': {'prefix': 'Year: '},
        'transition': {'duration': 500, 'easing': 'cubic-in-out'},  # Snellere overgang
        'pad': {'b': 10},
        'len': 0.9
    }],
    updatemenus=[{
        'type': 'buttons',
        'showactive': False,
        'buttons': [{
            'label': 'Play',
            'method': 'animate',
            'args': [None, {
                'frame': {'duration': 500, 'redraw': True},
                'fromcurrent': True,
                'transition': {'duration': 500, 'easing': 'cubic-in-out'}
            }]
        }, {
            'label': 'Pause',
            'method': 'animate',
            'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate', 'transition': {'duration': 0}}]
        }]
    }]
)

# Toon de heatmap
fig.show()
Staten na correctie: ['AL' 'AK' 'AZ' 'AR' 'CA' 'CO' 'CT' 'DE' 'DC' 'FL' 'GA' 'GU' 'HI' 'ID'
 'IL' 'IN' 'IA' 'KS' 'KY' 'LA' 'ME' 'MD' 'MA' 'MI' 'MN' 'MS' 'MO' 'MT'
 'NE' 'NV' 'NH' 'NJ' 'NM' 'NY' 'NC' 'ND' 'OH' 'OK' 'OR' 'PA' 'PR' 'RI'
 'SC' 'SD' 'TN' 'TX' 'VI' 'UT' 'VT' 'VA' 'WA' 'WV' 'WI' 'WY']